// variables globales
var NB_INPUT_INFERENT = 0;
// permet d'afficher le récapitulatif et le bouton d'envoie pour les règles de type réponses/articles
// paramètres :
// - id_out : id de l'élément html où afficher le récapitulatif
// - id_fixe : id de l'élément html input checkbox indiquant si la quantité est fixe ou non
// - id_select_article : id de l'élément html select contenant l'article séléctionné
// - id_quantite : id de l'élément html input number indiquant la quantité fixe à ajouté
// - id_somme : id de l'élément html input checkbox indiquant si l'on doit faire la somme de tout les site ou non pour cette règle
// - id_ensemble_question : id de l'élément html contenant l'ensemble des question ajouté ainsi que de leurs coefficient
function recapitulatifReponseArticle(id_out, id_fixe, id_select_article, id_quantite, id_somme, id_ensemble_question) {
	var out = $('#'+id_out);
	out.empty();
	var recap = "Si l'utilisateur répond :<ul>";
	var donnee_regle = new Object();
	
	/**** ajout des questions ****/
	donnee_regle.action = new Array();
	donnee_regle.condition = new Array();
	// on parcours les questions ajoutés
	$('.question_repart').each(function (indice, el) {
		recap += '<li>';
		var jbloc = $(el);
		var type = jbloc.find('input[name="type_question"]').val();
		var nouvelle_reponse = {id_question:jbloc.find('input[name="id_question"]').val(), type_reponse:type};
		
		NB_INPUT_INFERENT ++;
		switch(type) {
			case 'TEXTE': recap += 'Type texte non pris en charge :'; break;
			case 'ENTIER':
				nouvelle_reponse.min = jbloc.find('input[name="rep_inferente_min"]').val();
				nouvelle_reponse.max = jbloc.find('input[name="rep_inferente_max"]').val();
				recap += '<span class="text_en_valeur">entre '+nouvelle_reponse.min+' et '+nouvelle_reponse.max+'</span> à la';
				break;
			case 'ARTICLE':
				jbloc.find('div[name="article_repart"]').each(function (el, minibloc) {
					var jminibloc = $(minibloc);
					if(jminibloc.find('input[name^="rep_inferente_id"]').is(':checked')) {
						nouvelle_reponse.id_article = jminibloc.find('input[name^="rep_inferente_id"]').val();
						recap += '<span class="text_en_valeur">'+jminibloc.find('input[name="rep_inferente_libelle"]').val()+'</span>';
					}
				});
				recap += ' à la';
				break;
			case 'LISTE':
				jbloc.find('div[name="liste_repart"]').each(function (el, minibloc) {
					var jminibloc = $(minibloc);
					if(jminibloc.find('input[name^="rep_inferente_id"]').is(':checked')) {
						nouvelle_reponse.id_reponse = jminibloc.find('input[name^="rep_inferente_id"]').val();
						recap += '<span class="text_en_valeur">'+jminibloc.find('input[name="rep_inferente_libelle"]').val()+'</span>';
					}
				});
				recap += ' à la';
				break;
			case 'OUINON':
				nouvelle_reponse.reponse = jbloc.find('input[name="rep_inferente"]:checked').val();
				recap += '<span class="text_en_valeur">'+ nouvelle_reponse.reponse + '</span> à la';
				break;
		}
		recap += ' question <span class="text_en_valeur">'+jbloc.find('input[name="libelle_question"]').val()+'</span></li>';
		donnee_regle.condition.push(nouvelle_reponse);
	});
	
	recap += "</ul>";
	
	/**** ajout de l'article ****/
	recap += 'alors '
	// si c'est un type fixe, alors on se contente d'ajouter l'article à un quantité fixe
	if($('#'+id_fixe).is(':checked')) {
		donnee_regle.action.fixe = true;
		donnee_regle.action.somme = $('#'+id_somme).is(':checked');
		recap += "on ajoute l'article <span class=\"text_en_valeur\">"+$('#'+id_select_article+' option:selected').text()+"</span> x"+$('#'+id_quantite).val()+". "
		recap += $('#'+id_somme).is(':checked') ? "(en faisait la somme pour tout les sites)" : "(en ne le comptant qu'une seule fois)";
	}
	else {
		donnee_regle.action.fixe = false;
		donnee_regle.action.questions = new Array();
		recap += "on ajoute l'article <span class=\"text_en_valeur\">"+$('#'+id_select_article+' option:selected').text()+"</span> en faisant la somme des réponses aux questions suivantes :";
		recap += '<ul>';
		$('#'+id_ensemble_question+' div').each(function (indice, bloc) {
			var jbloc = $(bloc);
			var id_question = jbloc.find('input[name="question"]').val();
			var coefficient = jbloc.find('input[name="coefficient"]').val();
			recap += '<li><span class="text_en_valeur">'+jbloc.find('input[name="nom_question"]').val()+'</span> avec un coefficient de <span class="text_en_valeur">'+coefficient+'</span></li>';
			donnee_regle.action.questions.push({id_question:id_question, coefficient:coefficient});
		});
		recap += '</ul>';
	}
	donnee_regle.action.quantite = $('#'+id_quantite).val();
	donnee_regle.action.id_article = $('#'+id_select_article+' option:selected').val();
	
	/**** affichage du recapitulatif ****/
	out.append(recap);
	
	/**** ajout du bouton pour l'envoie a la bdd ****/
	var bouton_envoie = $('<input/>', {type:'button', value:'Enregistrer cette règle', click:function() {
		// on utilise l'objet 'donnee_regle' qui contient les informations suivantes :
		// .condition =>
		// [
		// 	{
		// 		id_question:((id de la question))
		// 		type_reponse : ((type de la réponse))
		// 		id_reponse : ((id de la réponse))
		// 		min : ((valeur min dans le cas de type ENTIER))
		// 		max : ((valeur max dans le cas de type ENTIER))
		// 		id_article : ((l'id de l'article dans le cas de type ARTICLE))
		// 		reponse : (('oui' ou 'non' dans le cas de type OUINON))
		// 	}
		// ]
		// .action.fixe: ((boolean permettant de savoir si c'est une valeur fixe))
		// .action.somme: ((boolean permettant de savoir si il faut faire la somme des sites ou non))
		// .action.quantite: ((la quantité de l'article à ajouter))
		// .action.id_article: ((l'id de l'article à ajouté))
		// .action.questions =>
		// [
		// 	{
		// 		id_question:((id de la question))
		// 		coefficient:((coefficient de la question))
		// 	}
		// ]
		
		// construction des id_reponses
		var id_reponses = new Array();
		
		// obtention des réponses si nécessaire
		for (var k in donnee_regle.condition) {
			if(donnee_regle.condition[k].type_reponse == 'ENTIER') {
				donnee_regle.condition[k].id_reponse =
				sendConstructedQueryJSON('ajouterReponse', {question:donnee_regle.condition[k].id_question,
															type:donnee_regle.condition[k].type_reponse,
															min:donnee_regle.condition[k].min,
															max:donnee_regle.condition[k].max,}, 'POST').id_reponse;
			}
			else if(donnee_regle.condition[k].type_reponse == 'OUINON') {
				donnee_regle.condition[k].id_reponse =
				sendConstructedQueryJSON('ajouterReponse', {question:donnee_regle.condition[k].id_question,
															type:donnee_regle.condition[k].type_reponse,
															reponse:donnee_regle.condition[k].reponse,}, 'POST').id_reponse;
			}
			id_reponses.push(donnee_regle.condition[k].id_reponse);
		}
		
		// ajout des règles dans la bdd
		var result = sendConstructedQueryJSON('ajouterRegleArticle',{id_article:donnee_regle.action.id_article,
																	fixe:donnee_regle.action.fixe,
																	quantite:donnee_regle.action.quantite,
																	somme:donnee_regle.action.somme,
																	id_reponses:id_reponses,
																	questions:donnee_regle.action.questions}, 'POST');
		
		if(!result.success) {
			alert("Erreur : " + result.out);
		}
		else alert("La règle à été ajoutée avec succès.");
	}});
	
	out.append($('<br />'));
	out.append(bouton_envoie);
}

// permet de réagir en fonction du changement du checkbox 'fixe' du formulaire
// paramètres :
// - el_check : element html du checkbox pour 'fixe'
// - arr_id_input_bloc_fixe : un tableau de la liste des id des input pour éléments fixe
// - arr_id_input_bloc_nonfixe : un tableau de la liste des id des input pour éléments non-fixe
// - id_bloc_fixe : id du bloc contenant les éléments fixe
// - id_bloc_nonfixe : id du bloc contenant les éléments non-fixe
function changeQuantiteFixe(el_check, arr_id_input_bloc_fixe, arr_id_input_bloc_nonfixe, id_bloc_fixe, id_bloc_nonfixe) {
	var check_fixe = $(el_check);
	var bloc_fixe = $('#'+id_bloc_fixe);
	var bloc_nonfixe = $('#'+id_bloc_nonfixe);
	
	if(check_fixe.is(':checked')) {
		// on active les inputs fixes
		for (var k in arr_id_input_bloc_fixe) {
			$('#'+arr_id_input_bloc_fixe[k]).removeAttr('disabled');
		}
		// on desactive les inputs non-fixes
		for (var k in arr_id_input_bloc_nonfixe) {
			$('#'+arr_id_input_bloc_nonfixe[k]).attr('disabled', 'disabled');
		}
		// on active et desactive le bloc fixe et non-fixe
		bloc_fixe.removeClass('desactiver');
		bloc_nonfixe.addClass('desactiver');
	}
	else {
		// on desactive les inputs fixes
		for (var k in arr_id_input_bloc_fixe) {
			$('#'+arr_id_input_bloc_fixe[k]).attr('disabled', 'disabled');
		}
		// on active desactive les inputs non-fixes
		for (var k in arr_id_input_bloc_nonfixe) {
			$('#'+arr_id_input_bloc_nonfixe[k]).removeAttr('disabled');
		}
		// on desactive et active le bloc fixe et non-fixe
		bloc_fixe.addClass('desactiver');
		bloc_nonfixe.removeClass('desactiver');
	}
}

// permet d'ajouter une question séléctionné par l'utilisateur dans une liste dans un bloc de question en sortie
// paramètres :
// - id_select_option : l'id de l'élément html select contenant la question séléctionné par l'utilisateur
// - id_bloc_out : l'id du bloc out où afficher la question
function ajouterQuestionSommeRepart(id_select_question, id_bloc_out) {
	var select_question = $('#'+id_select_question);
	var bloc_out = $('#'+id_bloc_out);
	
	var question = select_question.find('option:selected');
	
	var bloc = $('<div/>');
	
	bloc.append($('<span/>', {class:'text_en_valeur', text:question.text()}));
	bloc.append($('<input/>', {type:'hidden', value:question.val(), name:'question'}));
	bloc.append($('<input/>', {type:'hidden', value:question.text(), name:'nom_question'}));
	bloc.append(' - coefficient : ');
	bloc.append($('<input/>', {type:'number', value:1, name:'coefficient', class:'petit_input_number'}));
	bloc.append($('<img/>', {alt:'Supprimer', title:'Supprimer', src:'../../img/delete.png', click:function() {bloc.remove();}}));
	
	bloc_out.append(bloc);
}

function afficherListeQuestionPourRepart(id_select_question, liste_question) {
	var select_question = $('#'+id_select_question);
	
	select_question.empty();
	for (var k in liste_question) {
		select_question.append($('<option/>', {text:liste_question[k].info.libelle_question, value:liste_question[k].info.id_question}));
	}
}

// permet d'ajouter une question en tant que question conditionnant les règles de type réponses/articles
// paramètres :
// - id_liste_question : l'id de l'élément html select contenant la question séléctionné par l'utilisateur
// - id_out_question : l'id de l'élément html où ajouter la question et ses réponses
// - liste_question : la liste des questions et de leurs informations
function ajouterQuestionRepart(id_liste_question, id_out_question, liste_question, liste_categorie) {
	// on récupère les éléments nécessaires
	var question = $('#'+id_liste_question).find('option:selected');
	var out = $('#'+id_out_question);
	
	// on crée le bloc de la question ajouté
	var bloc = $('<div/>', {class:'question_repart'});
	
	// on crée les éléments de la question
	var div_question = $('<div/>', {text:question.text(), class:'text_en_valeur'});
	var reponses = $('<div/>');
	var info_question = chercherQuestionDansListeQuestionParId(liste_question, question.val());
	
	// fonction pour rechercher une question dans une liste de question par son id
	function chercherQuestionDansListeQuestionParId(liste_questions, id_question) {
		// recherche de la question
		for(var k in liste_questions) {
			if(liste_questions[k].info.id_question == id_question) {
				return liste_questions[k];
			}
		}
		alert("Unexpected error has occured.");
		return undefined;
	}
	
	
	NB_INPUT_INFERENT++;
	switch(info_question.info.type_reponse) {
		case 'TEXTE':
			reponses.append("Il n'est pas possible de créer une règle sur une question de type 'TEXTE'.");
			break;
		case 'OUINON':
			// création des radios oui et non
			var oui = $('<input/>', {type:'radio', name:'rep_inferente', value:'oui'});
			var non = $('<input/>', {type:'radio', name:'rep_inferente', value:'non'});
			reponses.append('Choisissez sur quel réponse réagir :');
			reponses.append($('<br />'));
			reponses.append(oui);
			reponses.append('oui');
			reponses.append(non);
			reponses.append('non');
			break;
		case 'LISTE':
			// création des checkboxs pour chaque réponse
			reponses.append('Choisissez les réponses sur lesquelles réagir :');
			for (var k in info_question.reponses) {
				var minibloc = $('<div/>', {name:'liste_repart'});
				minibloc.append($('<input/>', {type:'radio', name:'rep_inferente_id_'+NB_INPUT_INFERENT, value:info_question.reponses[k].id_reponse}));
				minibloc.append($('<input/>', {type:'hidden', name:'rep_inferente_libelle', value:info_question.reponses[k].libelle_reponse_combo}));
				minibloc.append($('<span/>', {text:info_question.reponses[k].libelle_reponse_combo}));
				reponses.append(minibloc);
			}
			break;
		case 'ENTIER':
			reponses.append("Spécifier l'interval sur lequel réagir");
			// création de deux inputs pour les valeurs min et max
			var inputMin = $('<input/>', {type:'number', min:0, name:'rep_inferente_min', value:'0'});
			var inputMax = $('<input/>', {type:'number', min:1, name:'rep_inferente_max', value:'1'});
			reponses.append($('<br />'));
			reponses.append('Valeur min :');
			reponses.append(inputMin);
			reponses.append($('<br />'));
			reponses.append('Valeur max :');
			reponses.append(inputMax);
			break;
		case 'ARTICLE':
			reponses.append("Choisissez les articles sur lesquelles réagir");
			for (var k in liste_categorie[info_question.info.id_categorie].articles) {
				var miniBloc = $('<div/>', {name:'article_repart'});
				miniBloc.append($('<input/>', {type:'radio', name:'rep_inferente_id_'+NB_INPUT_INFERENT, value:liste_categorie[info_question.info.id_categorie].articles[k].id_article}));
				miniBloc.append($('<input/>', {type:'hidden', name:'rep_inferente_libelle', value:liste_categorie[info_question.info.id_categorie].articles[k].description_article}));
				miniBloc.append($('<span/>', {text:liste_categorie[info_question.info.id_categorie].articles[k].description_article}));
				reponses.append(miniBloc);
			}
			break;
	}
	
	// on ajoute les éléments
	bloc.append($('<img/>', {alt:'Supprimer', title:'Supprimer', src:'../../img/delete.png', class:'aDroite', click:function(){bloc.remove();}}));
	bloc.append($('<input/>', {type:'hidden', value:info_question.info.type_reponse, name:'type_question'}));
	bloc.append($('<input/>', {type:'hidden', value:question.text(), name:'libelle_question'}));
	bloc.append($('<input/>', {type:'hidden', value:chercherQuestionDansListeQuestionParId(liste_question, question.val()).info.id_question, name:'id_question'}));
	bloc.append(div_question);
	bloc.append(reponses);
	out.append(bloc);
}

function remplirCategorieRepart(id_select_categorie, id_select_article, liste_categorie) {
	var select_categorie = $('#'+id_select_categorie);
	var select_article = $('#'+id_select_article);

	// remplissage de la liste des categories
	for (var k in liste_categorie) {
		select_categorie.append($('<option/>', {text:liste_categorie[k].description_categorie, value:liste_categorie[k].id_categorie}));
	}
	
	// ajout de l'affichage des articles lors de la selection d'une categorie
	select_categorie.change(function () {
		select_article.empty();
		var id_categorie = select_categorie.find('option:selected').val();
		if(id_categorie != '') {
			for (var k in liste_categorie[id_categorie].articles) {
				select_article.append(nouvelElement('option', {text:liste_categorie[id_categorie].articles[k].description_article, value:liste_categorie[id_categorie].articles[k].id_article, donnee:liste_categorie[id_categorie].articles[k]}));
			}
		}
	});
	
	select_categorie.change();
}
